我有简单的selenium程序验证google中的值搜索框是否等于hello world但是我收到了这个错误:
线程中的异常" main" org.openqa.selenium.NoSuchElementException:没有这样的元素:无法 定位元素:{"方法":"名称","选择器":" q"} ....
这是我的完整代码
public class SimpleSelenium {
WebDriver driver = null;
public static void main(String args[]) {
SimpleSelenium ss = new SimpleSelenium();
ss.openBrowserInChrome();
ss.getPage();
ss.listenForHelloWorld();
ss.quitPage();
}
private void openBrowserInChrome(){
System.setProperty("webdriver.chrome.driver", "C:/chromedriver.exe");
driver = new ChromeDriver();
}
private void quitPage() {
driver.quit();
}
private void getPage() {
driver.get("http://www.google.com");
}
private void listenForHelloWorld() {
WebElement searchField = driver.findElement(By.name("q"));
int count = 1;
while (count++ < 20) {
if (searchField.getAttribute("value").equalsIgnoreCase("hello world")) {
break;
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
答案 0 :(得分:0)
您是否等到页面准备就绪并显示元素? 当页面仍在加载时,我经常遇到此错误。您可以添加类似
的内容(MochaJS示例,几乎与JAVA测试的API相同)
InputStream is = null;
try {
is = contentResolver.openInputStream(importedFileUri);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
等到元素可见。如果失败,将提高TIME_TO_WAIT_MS的超时。
答案 1 :(得分:0)
google搜索栏永远不会有#34; hello world&#34;因为你还没有输入它?
当您输入搜索时,如果您使用控制台检查元素,搜索字段值似乎也不会更新。
如果你只是学习我会写这样的测试并点击搜索按钮,然后确认&#34;你好世界&#34;搜索结果中的文字:
WebElement searchField = driver.findElement(By.name("q"))
searchField.sendKeys("Hello World")
//Add code to click search button
//Add code to assert results on next page
此外,我会完全更改您的listenForHelloWorld()方法并使用内置的WebDriver ExpectedConditions:
new WebDriverWait(driver, 10)
.until(ExpectedConditions.textToBePresentInElement(searchField, "Hello World"))