【发布时间】:2019-11-14 15:10:30
【问题描述】:
我正在尝试使用 Selenium 编写我的第一个程序,该程序登录到我的个人资料,然后搜索特定的人或公司。一切正常,直到我想从搜索结果中输入个人资料。我的代码在这里
public static void main(String args[]){
ChromeDriverManager.getInstance(DriverManagerType.CHROME).setup();
WebDriver driver = new ChromeDriver();
final String username = "username";
final String password = "password";
driver.get("https://www.linkedin.com/");
driver.manage().window().maximize();
driver.findElement(By.xpath("/html/body/nav/section[2]/form/div[1]/div[1]/input"))
.sendKeys(username);
driver.findElement(By.xpath("/html/body/nav/section[2]/form/div[1]/div[2]/input"))
.sendKeys(password);
driver.findElement(By.xpath("/html/body/nav/section[2]/form/div[2]/button"))
.click();
driver.findElement(By.xpath("//*[@id=\"ember31\"]/input"))
.sendKeys("Bill Gates", Keys.ENTER);
WebElement element = driver.findElement(By.xpath("//*[@id=\"ember503\"]/span/span[1]/span[1]"));
element.click();
}
它给了我错误Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="ember503"]/span/span[1]/span[1]"}。
所以,首先我尝试了不同的xpaths,但都没有奏效。然后我尝试了cssSelector 仍然没有。然后我尝试了这个
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//[@id=\"ember503\"]/span/span[1]/span[1)));
又遇到了一个错误Exception in thread "main" org.openqa.selenium.TimeoutException: Expected condition failed: waiting for element to be clickable: By.xpath: //*[@id="ember503"]/span/span[1]/span[1] (tried for 10 second(s) with 500 milliseconds interval)。
所以我发现 selenium 无法找到每一个需要时间加载到页面上的元素。你能帮我理解我在哪里犯了错误吗?
【问题讨论】:
-
我假设问题是即使搜索结果相同,每个搜索结果之后 xPath 也会发生变化。我尝试搜索相同的东西两次,得到了两个不同的 xPath。
//*[@id="ember1823"]/span/span/span[1]和//*[@id="ember2048"]/span/span/span[1]。检查并查看您的 xPath 是否正在改变?如果是这样,这可能就是它找不到您的元素的原因。