嗨,大家好,所以我是Selenium / Java / HTML的亲戚(阅读:完整的)新手,如果我问的话显而易见道歉。 我需要的是能够
这是网站HTML:
特定复选框1
<div class="checkbox">
<label id="agree_to_terms_label" for="agree_to_terms_join" class="visible">
<input id="agree_to_terms_join" name="agree_to_terms" type="checkbox" data-required="true" data-required-message="You need to agree to the *** Account Holder agreement" data-change="" class="parsley-validated">
<span class="left-block"></span>
I have read, understand and agree to the <a href="/terms-and-conditions/" target="_blank">*** Account Holder Agreement</a>
and acknowledge <a href="/privacy-policy" target="_blank">*** Privacy Policy</a>
<input type="hidden" name="agree_to_terms" value="yes">
</label>
</div>
特定复选框2:
<div class="checkbox">
<label id="agree_to_offers_label" for="agree_to_offers" class="visible">
<span class="left-block">
<input id="agree_to_offers" name="agree_to_offers" type="checkbox" data-required-message="" data-change="" checked="checked" value="yes">
<span>By joining *** you'll be notified of exclusive offers and account updates via email</span>
</span>
</label>
</div>
我没有成功的尝试:
Xpath的:
driver.findElement(By.xpath("//input[@id='agree_to_terms_join' and @type='checkbox']")).click();
元素不可见
driver.findElement(By.xpath("//*[@id='agree_to_terms_join']/parent::label")).click();
点击div中的href超链接
driver.findElement(By.xpath("//*[@id='agree_to_terms_label']/input")).click();
元素不可见
CSS:
driver.findElement(By.cssSelector("input[id = 'agree_to_terms_join'][type = 'checkbox']")).click();
元素不可见
by.className:
driver.findElement(By.className("checkbox")).click();
打开超链接
我浏览了一下论坛,看到了被隐藏的元素的提及 - 但是我无法发现任何iframe或其他似乎隐藏着这个bugger的东西?
非常感谢任何帮助!!
答案 0 :(得分:1)
点击的确切元素是&#34; ::之前&#34;这是一个伪元素。我想你需要使用Javascript。下面的代码应该适合你
WebElement element1 = driver.findElement(By.cssSelector(".left-block"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element1);
答案 1 :(得分:0)
试试这个:
WebDriver driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://www.quidco.com/join-quidco/");
driver.findElement(By.xpath(".//label[@id='agree_to_terms_label']")).click();
driver.findElement(By.xpath(".//label[@id='agree_to_offers_label']")).click();
如果有必要,可以使用隐式或显式等待
答案 2 :(得分:0)
尝试以下:
WebElement yourChkBox = driver.findElement(By.xpath("//*[@id='agree_to_terms_join']/parent::label"));
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.visibilityOf(yourChkBox));
Actions act = new Actions(driver);
act.moveToElement(yourChkBox).click().build().perform();
<强>更新强>
或者尝试使用javascriptexecutor,如下所示:
WebElement yourChkBox = driver.findElement(By.xpath("//*[@id='agree_to_terms_join']/parent::label"));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].setAttribute('value', 'Yes');", yourChkBox );