【问题标题】:Can't make selenium webdriver click the checkbox无法使 selenium webdriver 单击复选框
【发布时间】:2016-09-15 20:22:49
【问题描述】:

我正在开发 eclipse neon、selenium webdriver 2.53.0 和 firefox 45.3.0 esr。 我不能让 selenium 标记网站上唯一的复选框。这是我的测试脚本:

package testy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class rejestr {
    public WebDriver driver;
    @BeforeMethod
    public void beforeMethod() {
        driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.navigate().to("http://dev.wedkarz.pzw.pl/#/login");
    }
    @Test
    public void f () throws InterruptedException { 
        driver.findElement(By.className("nav-item")).click();
        driver.findElement(By.id("firstName")).sendKeys("Jan");
        driver.findElement(By.id("lastName")).sendKeys("Nowak");
        driver.findElement(By.id("email")).sendKeys("jnowak@o2.pl"); 
        driver.findElement(By.id("plainPassword")).sendKeys("password");
        new Select(driver.findElement(By.id("district"))).selectByVisibleText("Okręg     PZW w Bydgoszczy");
        new Select(driver.findElement(By.id("circle"))).selectByVisibleText("Koło PZW nr 31");
        driver.findElement(By.id("fishingLicense")).sendKeys("12345678990");
        driver.findElement(By.id("squaredOne")).click();
    }
    @AfterMethod
    public void afterMethod() {
        System.out.print("Test zakończony powodzeniem");
        driver.quit();
    }
}

这是复选框的 html 代码:

<div class="row form-group m-b-lg">
              <div class="squaredOne">
                <input id="squaredOne" name="check" type="checkbox" value="None" class="ng-untouched ng-valid ng-dirty">
                <label for="squaredOne">
                  <p>Wyrażam zgodę na otrzymywanie od PZW informacji<br> o charakterze promocyjnym i reklamowym
                  przekazywanych drogą elektroniczną, w tym przesyłanych z wykorzystaniem telekomunikacyjnych
                  urządzeń końcowych (np. komputer, tablet).</p>
                </label>
              </div>
              <span class="help-block">

              </span>
            </div>

非常感谢您的帮助,因为我已经与它斗争了 2 天。

【问题讨论】:

  • 您使用的是哪种浏览器?
  • 正如我提到的 - firefox 45.3.0 esr

标签: java checkbox selenium-webdriver testng testng-eclipse


【解决方案1】:

如果你使用的是 IE 浏览器,这有点棘手 -

if (driver.Capabilities.BrowserName.Equals(“internet explorer"))
    driver.findElement(By.id("squaredOne").SendKeys(Keys.Space);
else
    driver.findElement(By.id("squaredOne").Click();

或者尝试使用 Xpath 到达元素

driver.findElement(By.xpath("//input[@type='checkbox']")).click();

如果这不起作用,请尝试使用类名

WebElement mybox = driver.findElement(By.className("squaredOne"));     
mybox.click();

【讨论】:

  • @JRodDynamite - 如果您觉得我遗漏了什么,请编辑答案。我猜后来 OP 也提到了。
  • @Techidiot - 推翻了我的投票。快速阅读问题。我的错。
  • @JRodDynamite 没问题。和平 :) 点赞就可以了 ;)
【解决方案2】:

您的代码driver.findElement(By.id("squaredOne")).click() 应该可以工作。但如果没有,那么您可以尝试:

  1. 将选择器更改为 xpath:

    driver.findElement(By.xpath("//input[@id='squaredOne']")).click();
    
  2. 点击父div:

    driver.findElement(By.xpath("//div[./input[@id='squaredOne']]")).click()`
    
  3. 使用动作类:

    Actions actions = new Actions(driver);
    actions.click(driver.findElement(By.xpath("//input[@id='squaredOne']")));
    actions.build().perform();
    

【讨论】:

    猜你喜欢
    • 2016-04-29
    • 2018-04-24
    • 1970-01-01
    • 2014-04-08
    • 2019-05-18
    • 2015-12-03
    • 2017-11-10
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多