繁体   English   中英

C#Selenium WebDriver测试

[英]c# selenium webdriver testing

有人可以帮我解决这个问题吗:由于第二次单击事件,我的Selenium Webdriver测试用例总是失败。 错误显示元素不可见。

public void MyTestCase()
{
    driver.Navigate().GoToUrl(baseURL + "/");
    driver.FindElement(OpenQA.Selenium.By.Id("ctl00_ContentPlaceHolder1_FlightSearchV6_txtFrom")).Clear();
    driver.FindElement(OpenQA.Selenium.By.Id("ctl00_ContentPlaceHolder1_FlightSearchV6_txtFrom")).SendKeys("CON");
    driver.FindElement(OpenQA.Selenium.By.Id("ctl00_ContentPlaceHolder1_FlightSearchV6_txtTo")).Clear();
    driver.FindElement(OpenQA.Selenium.By.Id("ctl00_ContentPlaceHolder1_FlightSearchV6_txtTo")).SendKeys("SOL");
    driver.FindElement(OpenQA.Selenium.By.Id("ctl00_ContentPlaceHolder1_FlightSearchV6_btnFlightSearch")).Click();
    WebDriverWait wait1 = new WebDriverWait(this.driver, TimeSpan.FromSeconds(10));
    wait1.Until((x) =>
    {
        return ((IJavaScriptExecutor)this.driver).ExecuteScript("return document.readyState").Equals("complete");
    });

    driver.FindElement(OpenQA.Selenium.By.Id("ctl00_ContentPlaceHolder1_ucFlightOuterBox0_btnSelect")).Click();
}

该错误告诉我,您单击的元素不可见。 看来您确实尝试等待document.readyState ,但我更喜欢使用ExpectedConditions

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement element = wait.Until(
    ExpectedConditions.ElementIsVisible(By.Id(<id-goes-here>)));
element.Click();

ElementIsVisible摘要:

期望检查元素是否存在于页面的DOM上并且可见。 可见性意味着不仅显示元素,而且其高度和宽度都大于0。

如果将Firefox用作Webdriver,则如果元素不在可见的浏览器区域中,也会发生“元素不可见”错误。 您可能必须先滚动到该元素。

参见例如,使用硒滚动到元素

第一次单击后,尝试添加Thread.sleep(1000)。 代码可能会使页面超出限制,这意味着您等待页面完成加载实际上可以在下一页开始加载之前开始。 因此,它将像“哦,是的,已完成加载”那样进行查看,然后开始加载下一页。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM