ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

OpenQA.Selenium.NoSuchElementException未处理C#另一个网站

2019-11-20 15:08:09  阅读:167  来源: 互联网

标签:selenium selenium-webdriver asp-net c


我是硒的新手,目前正在研究硒的工作原理.开始将其用于ASP.NET应用程序,我正在使用C#Selenium驱动程序,IE驱动程序服务器(32位,因为它比64位快)

我导航到一个应用程序,然后单击一个链接,该链接会将我带到另一个网站,我必须在其中找到一个文本框并清除它,然后输入一些文本(SendKeys),然后单击一个按钮.

当它从主网站转到另一个网站时,找不到元素(我尝试使用by.ID和by.Name).我确保该元素在网页上可用.作为推荐,我使用了ImplicitlyWait,但没有运气,尝试了thread.sleep()没有运气.测试是否需要在最初启动的网站上进行?..以下是我的代码段..请帮助我.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Support.UI;
using System.Threading;

namespace mySelenium
{
    class Program
    {
    private static void Main(string[] args)
    {
        IWebDriver driver = new InternetExplorerDriver(@"C:\Users\msbyuva\Downloads\IEDriverServer_Win32_2.45.0\");
        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

        driver.Navigate().GoToUrl("http://MyorgName.org/Apps/Sites/2015/login.aspx");

        IWebElement userNameTxtBox = driver.FindElement(By.Id("ContentPlaceHolder1_Login1_UserName"));
        userNameTxtBox.SendKeys("MSBYUVA");

        IWebElement passwordTxtBox = driver.FindElement(By.Id("ContentPlaceHolder1_Login1_Password"));
        passwordTxtBox.SendKeys("1234");

        var myButton = driver.FindElement(By.Id("ContentPlaceHolder1_Login1_LoginButton"));
        myButton.Click();

        var EMailLink = driver.FindElement(By.LinkText("Email Testing Link"));
        EMailLink .Click();

        //Thread.Sleep(10000);

// -- HERE IT IS THROWING ERROR (ANOTHER WEBSITE AFTER CLICKING HYPERLINK)

    var toEmailAddress  = driver.FindElement(By.Name("ctl00$ContentPlaceHolder1$txtTo"));
                toEmailAddress.Clear();
                toEmailAddress.SendKeys("msbyuva@gmail.com");


            var chkEmailAttachment = driver.FindElement(By.Name("ctl00$ContentPlaceHolder1$ChkAttachMent"));
            chkEmailAttachment.Click();

            var sendEmailButton = driver.FindElement(By.Id("ctl00_ContentPlaceHolder1_BtnSend"));
            sendEmailButton.Click();
        }
    }
}

解决方法:

您需要切换到新打开的窗口并为其设置焦点,以便向其发送任何命令

string currentHandle = driver.CurrentWindowHandle;

driver.SwitchTo().Window(driver.WindowHandles.ToList().Last());

在新打开的窗口完成后(根据需要)

driver.Close();
driver.SwitchTo().Window(currentHandle );

更完美地使用PopupWindowFinder

string currentHandle = driver.CurrentWindowHandle;
PopupWindowFinder popUpWindow = new PopupWindowFinder(driver);
string popupWindowHandle = popUpWindow.Click(EMailLink );
driver.SwitchTo().Window(popupWindowHandle);

//then do the email stuff

 var toEmailAddress  = driver.FindElement(By.Name("ctl00$ContentPlaceHolder1$txtTo"));
                toEmailAddress.Clear();
                toEmailAddress.SendKeys("msbyuva@gmail.com");


            var chkEmailAttachment = driver.FindElement(By.Name("ctl00$ContentPlaceHolder1$ChkAttachMent"));
            chkEmailAttachment.Click();

            var sendEmailButton = driver.FindElement(By.Id("ctl00_ContentPlaceHolder1_BtnSend"));
            sendEmailButton.Click();
        }
    }
}

//closing pop up window
driver.Close();
driver.SwitchToWindow(currentHandle);

标签:selenium,selenium-webdriver,asp-net,c
来源: https://codeday.me/bug/20191120/2044872.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有