Selenium Webdriver 元素识别

Selenium Webdriver element identification

嗨,我是 Selenium Webdriver 的新手。

我已经接受了这个website,我正在尝试点击注册Link。我写了下面的代码。

driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://www.stepintohealth.qa");
driver.findElement(By.linkText("Register")).click();

在执行代码时抛出元素未找到异常。我在 seleniunm IDE 中尝试过同样的方法,它没有任何问题。我也验证了 iframes,但是 link 不在 iframes.

欢迎来到 Selenium 的世界。这通常是您面临的元素 wait/find 问题。我添加了 explicit 在执行单击之前等待以确保元素存在。

driver = new FirefoxDriver();
driver.get("http://www.stepintohealth.qa");

By byCss = By.cssSelector(".right1.navmenu a.register");
WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(byCss ));
myDynamicElement.click();

要记住几件事:

  1. 您不希望将隐式和显式等待混合在一起,因为这可能是一个性能问题。不推荐。
  2. 选择器对于唯一地找到元素非常重要。我倾向于尽可能避免 LinkTextid 应该永远是您的首选。如果可以,请尝试使用 nameclasNamecssSelectorxpath。在这种情况下,className 效果不佳。用 cssSelector 测试并做了它应该做的。有关详细信息,请参阅 this