在 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();