如何使用Selenium和Java单击元素

时间:2019-05-03 09:54:58

标签: java selenium xpath css-selectors webdriverwait

https://shop.medtronic-diabetes.ch/

在上述网站中,点击右上角的 Anmelden 链接,倒数第三。 我无法找到电子邮件xpath,因为它是框架的一部分。

在下面尝试过但没有运气

  1. driver.switchTo().frame(0);
  2. driver.switchTo().frame("cbox1556878105885");
  3. driver.switchTo().frame("cboxIframe");
  4. driver.switchTo().frame(find_element_by_xpath(//xpath));

2 个答案:

答案 0 :(得分:1)

尝试使用以下定位器。

     Driver.Navigate().GoToUrl("https://shop.medtronic-diabetes.ch/");
     WebDriverWait webDriverWait = new WebDriverWait(Driver, TimeSpan.FromSeconds(30));
     var loginElement = webDriverWait.Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("div[class='registerNow firstChild'] a[title='Anmelden']")));
     loginElement.Click();
     webDriverWait.Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt(By.ClassName("cboxIframe")));
     var email = webDriverWait.Until(ExpectedConditions.ElementToBeClickable(By.Id("j_username")));
     email.SendKeys("Rd@test.com");

建议的切换到iframe的方法是使用webdriverwait-预期的条件,例如ExpectedConditions.FrameToBeAvailableAndSwitchToIt。 如果您有iframe的ID,请使用Driver.SwitchTo().Frame("frameID");

然后使用Driver.SwitchTo().DefaultContent();来选择页面或主文档的第一帧,或者使用Driver.SwitchTo().ParentFrame();来选择父框架

答案 1 :(得分:0)

要单击位于右上角(即倒数第3个)的文本为 Anmelden 的元素,然后将字符序列发送到电子邮件< / em>字段,您需要诱使 WebDriverWait 使元素可点击,并且可以使用以下任一解决方案:

  • cssSelector

    driver.get("https://shop.medtronic-diabetes.ch/");
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("li.firstRow a[title='Anmelden']"))).click();
    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe.cboxIframe")));
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input.signInboxInputFields#j_username"))).sendKeys("Mohit_Garg");
    
  • xpath

    driver.get("https://shop.medtronic-diabetes.ch/");
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//li[@class='firstRow']//a[text()='Anmelden']"))).click();
    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@class='cboxIframe']")));
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='signInboxInputFields required' and @id='j_username']"))).sendKeys("Mohit_Garg");
    
  • 浏览器快照:

medi