在 href 按钮上使用 Click() HTML
Using Click() on href Button HTML
我正在用 selenium 开发一个项目,一旦它填写了一个文本框,点击下一页,就会出现一个验证码。首先你需要验证,然后验证码出现。它只是页面中间的一个弹出框,使其他所有内容都无法点击,并在其后面的页面上出现白色薄雾。单击验证后,我已经有了解决验证码的方法。
我遇到的问题是,使用我尝试过的方法,webdriver 似乎无法找到此按钮的任何痕迹。尝试使用 click()
时,我总是得到 no such element exception
。我试过 wait.until(ExpectedConditions.elementToBeClickable(By.id("home_children_button"))).click();
、wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("home_children_button")))).click();
,我也试过在 google 上放置 thread.sleep(Num)
而不是使用等待,以及许多其他方法。然后,当我对 href 按钮进行一些研究时,我发现人们建议使用 By.linkText
。所以我尝试了我之前尝试过的所有方法,但仍然无法找到元素。我在 google 上找不到任何其他内容,所以我想我会寻求帮助。
我已经附上了我目前正在寻找按钮的 HTML 代码,以及网站的 link 代码。不幸的是要遇到这个页面,你必须注册一个帐户。我输入 DOB 后通常会出现此页面。感谢您提供的任何说明。
<a href="javascript:;" id="home_children_button" class="sc-bdfBwQ jXXvQg sc-kEjbxe hVNnSn">Verify</a>
https://account.battle.net/creation/flow/creation-full
我试过的代码:
wait2.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("fc-iframe-wrap")));
wait2.until(ExpectedConditions.elementToBeClickable(By.id("home_children_button"))).click();
WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("CaptchaFrame")));
wait2.until(ExpectedConditions.elementToBeClickable(By.id("home_children_button"))).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("home_children_button"))).click();
wait.until(ExpectedConditions.elementToBeClickable(By.id("home_children_button"))).click();
,
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("home_children_button")))).click();
Thread.sleep(5000) //wait for it to pop up
driver.findElement(By.id("home_children_button"))).click();
同时尝试使用 By.linkText
。
解决方法:
在被告知这是一个 iframe 后,我仔细查看 HTML 发现有多个 iframe。所以我等着切换它们以便单击按钮。
WebDriverWait wait2 = new WebDriverWait(driver, 20);
wait2.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("/html/body/div[4]/iframe")));
wait2.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("/html/body/div/div[1]/div/iframe")));
wait2.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("/html/body/div[1]/div[2]/div[1]/iframe")));
wait2.until(ExpectedConditions.elementToBeClickable(By.id("home_children_button"))).click();
正如我所怀疑的那样,它在 iframe 中,您需要切换驱动程序的焦点才能与 verify 按钮交互:
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("CaptchaFrame")));
wait.until(ExpectedConditions.elementToBeClickable(By.id("home_children_button"))).click();
完成后,您可能想使用 defaultContent()
driver.switchTo().defaultContent();
我正在用 selenium 开发一个项目,一旦它填写了一个文本框,点击下一页,就会出现一个验证码。首先你需要验证,然后验证码出现。它只是页面中间的一个弹出框,使其他所有内容都无法点击,并在其后面的页面上出现白色薄雾。单击验证后,我已经有了解决验证码的方法。
我遇到的问题是,使用我尝试过的方法,webdriver 似乎无法找到此按钮的任何痕迹。尝试使用 click()
时,我总是得到 no such element exception
。我试过 wait.until(ExpectedConditions.elementToBeClickable(By.id("home_children_button"))).click();
、wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("home_children_button")))).click();
,我也试过在 google 上放置 thread.sleep(Num)
而不是使用等待,以及许多其他方法。然后,当我对 href 按钮进行一些研究时,我发现人们建议使用 By.linkText
。所以我尝试了我之前尝试过的所有方法,但仍然无法找到元素。我在 google 上找不到任何其他内容,所以我想我会寻求帮助。
我已经附上了我目前正在寻找按钮的 HTML 代码,以及网站的 link 代码。不幸的是要遇到这个页面,你必须注册一个帐户。我输入 DOB 后通常会出现此页面。感谢您提供的任何说明。
<a href="javascript:;" id="home_children_button" class="sc-bdfBwQ jXXvQg sc-kEjbxe hVNnSn">Verify</a>
https://account.battle.net/creation/flow/creation-full
我试过的代码:
wait2.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("fc-iframe-wrap")));
wait2.until(ExpectedConditions.elementToBeClickable(By.id("home_children_button"))).click();
WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("CaptchaFrame")));
wait2.until(ExpectedConditions.elementToBeClickable(By.id("home_children_button"))).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("home_children_button"))).click();
wait.until(ExpectedConditions.elementToBeClickable(By.id("home_children_button"))).click();
,
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("home_children_button")))).click();
Thread.sleep(5000) //wait for it to pop up
driver.findElement(By.id("home_children_button"))).click();
同时尝试使用 By.linkText
。
解决方法: 在被告知这是一个 iframe 后,我仔细查看 HTML 发现有多个 iframe。所以我等着切换它们以便单击按钮。
WebDriverWait wait2 = new WebDriverWait(driver, 20);
wait2.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("/html/body/div[4]/iframe")));
wait2.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("/html/body/div/div[1]/div/iframe")));
wait2.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("/html/body/div[1]/div[2]/div[1]/iframe")));
wait2.until(ExpectedConditions.elementToBeClickable(By.id("home_children_button"))).click();
正如我所怀疑的那样,它在 iframe 中,您需要切换驱动程序的焦点才能与 verify 按钮交互:
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("CaptchaFrame")));
wait.until(ExpectedConditions.elementToBeClickable(By.id("home_children_button"))).click();
完成后,您可能想使用 defaultContent()
driver.switchTo().defaultContent();