IWebDriver driver = new RemoteWebDriver(uri, dc);
WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0,0,60));
driver.Navigate().GoToUrl("https://google.com/ncr");
string xpath = "//*[@id=\"lst-ib\"]"; // the google search text box
IWebElement element = driver.FindElement(By.XPath(xpath));
//wait.Until(ExpectedConditions.ElementToBeClickable(element));
element.Click();
element.SendKeys("some text");
上面的代码按原样运行。但是,如果我取消注释wait.Until,则浏览器将打开,但不会发送任何文本。它似乎在等待时“停止”。直到。不知道我做错了什么。对于当前的用例来说这不是问题,但是知道如何正确地将其用于将来的用途会很好。
编辑: 经过一些搜索和测试后,我发现以下代码专门用于RemoteWebDriver。
IWebDriver driver = new RemoteWebDriver(uri, dc);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(60);
IWebElement element = driver.FindElement(By.Name(name));
当DOM中存在“name”时它起作用,并且当我将“name”修改为不在DOM中的东西时抛出异常,如预期的那样。 感谢@DebanjanB让我朝着正确的方向前进。
答案 0 :(得分:2)
如果您在 WebElement
上查看 Search Box
表示为 Google Home Page
,则该元素如下:
<input class="gsfi" id="lst-ib" maxlength="2048" name="q" autocomplete="off" title="Search" type="text" value="" aria-label="Search" aria-haspopup="false" role="combobox" aria-autocomplete="list" dir="ltr" spellcheck="false" style="border: none; padding: 0px; margin: 0px; height: auto; width: 100%; background: url("data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D") transparent; position: absolute; z-index: 6; left: 0px; outline: none;">
关于 Search Box
的几件事:
<input>
标记,仅接受 text
<input>
标记没有与 onClick()
相关联的任何 <button>
事件或 <a>
标记。ExpectedConditions
的正确条款可以是 ElementIsVisible
,而不是ElementToBeClickable
。ElementIsVisible
子句将确保an element is present on the DOM of a page and visible.
Visibility
表示该元素不仅会显示,而且其高度和宽度也会大于0.
正如您所说,您得到的结果相同,所以我会对您的代码进行一些简单的调整,并将相应的代码编写为:
WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0,0,10));
IWebElement element = wait.Until(ExpectedConditions.ElementIsVisible(By.Name("q")));
element.SendKeys("some text");
答案 1 :(得分:0)
public static void search() throws Throwable
{
WebElement SearchBox = driver.findElement(By.xpath(".//*[@id='ctl00_PlaceHolderSearchArea_SmallSearchInputBox1_csr_sbox']"));
SearchBox.clear();
SearchBox.sendKeys("Text");
driver.manage().timeouts().implicitlyWait(8000, TimeUnit.SECONDS);
WebElement SearchLink=driver.findElement(By.xpath(".//*[@id='ctl00_PlaceHolderSearchArea_SmallSearchInputBox1_csr_SearchLink']"));
SearchLink.click();
driver.manage().timeouts().implicitlyWait(10000, TimeUnit.SECONDS);
driver.navigate().back();
}
如果您遇到任何挑战,请告诉我