如何使用Selenium选中输入范围样式为复选框?Only::after作为状态之间的差异

如何使用Selenium选中输入范围样式为复选框?Only::after作为状态之间的差异,selenium,selenium-webdriver,xpath,css-selectors,Selenium,Selenium Webdriver,Xpath,Css Selectors,我正在尝试检查是否选中了复选框。我的复选框使用输入和span设置样式,不使用复选框标记。由于它不是默认的复选框,因此我不能使用方法,如isSelected或isChecked来检查其状态。然后我试图检查是否有任何类属于某个状态,而不是另一个状态。然而,到目前为止我发现的唯一区别是,当选择元素时,之后会出现一个::但不确定如何进行检查 我发现了一个类似问题的教程,但对Javascript了解不多,也不知道如何使其适应我的情况 点击前 点击后 根据@pguardiario的回答,这就是正在使用

我正在尝试检查是否选中了复选框。我的复选框使用输入和span设置样式,不使用复选框标记。由于它不是默认的复选框,因此我不能使用方法,如isSelected或isChecked来检查其状态。然后我试图检查是否有任何类属于某个状态,而不是另一个状态。然而,到目前为止我发现的唯一区别是,当选择元素时,之后会出现一个
::但不确定如何进行检查

我发现了一个类似问题的教程,但对Javascript了解不多,也不知道如何使其适应我的情况

点击前

点击后

根据@pguardiario的回答,这就是正在使用的内容

 System.out.println(js.executeScript("return window.getComputedStyle(document.querySelector('.custom-checkmark'), ':after').getPropertyValue('content')"));
但无论选择与否,它都返回相同的输出(空字符串)

更新

找到选定和未选定状态之间的差异。未选中复选框时,
.custom复选标记:after
样式具有
display none
。 我还不知道如何使用这些信息,因为这是我目前掌握的信息,他们在点击复选框之前和之后都返回display none

@Test
public void testingCheckbox() {

    JavascriptExecutor js = (JavascriptExecutor) wd;

    System.out.println(js.executeScript("return window.getComputedStyle(document.querySelector('.custom-checkmark'), ':after').getPropertyValue('display')"));

    lp.clickCheckBox();

    System.out.println(js.executeScript("return window.getComputedStyle(document.querySelector('.custom-checkmark'), ':after').getPropertyValue('display')")); 
}

新发现

看起来实际上有两个复选框。一个带有跨度标记,另一个带有跨度。当取消选择某些属性时,它们一起出现


谢谢您的帮助。

请尝试下面的CSS选择器来识别它

span.custom-checkmark:after
也请参阅下面的链接了解更多详细信息

尝试下面的CSS选择器来识别它

span.custom-checkmark:after
也请参阅下面的链接了解更多详细信息

我无法测试它,但它应该是这样的:

driver.executeScript('return window.getComputedStyle(document.querySelector(".custom-checkmark"), ":after").getPropertyValue("content")')

很抱歉,我说的太长了,Java没有遗传,这让我很痛苦:(

我不能测试它,但它应该是这样的:

driver.executeScript('return window.getComputedStyle(document.querySelector(".custom-checkmark"), ":after").getPropertyValue("content")')

很抱歉排了这么长的队,顺便说一句,Java没有heredocs,这让人很痛苦:(

尝试使用
JavascriptExecutor
,导入它们:

import org.openqa.selenium.JavascriptExecutor;
试试这个:

WebElement chk = driver.findElement(By.xpath("//*[@class='custom-checkmark' and ./preceding-sibling::*[@id='terms_checkbox']]"));//or you have
String getPro;
getPro = ((JavascriptExecutor)driver).executeScript("return window.getComputedStyle(arguments[0], ':after').getPropertyValue('background-color');",chk).toString();
System.out.println(getPro);
chk.click();
Thread.sleep(1000);
getPro = ((JavascriptExecutor)driver).executeScript("return window.getComputedStyle(arguments[0], ':after').getPropertyValue('background-color');",chk).toString();
System.out.println(getPro);

使用
.getPropertyValue('background-color')
不确定,但这可能是一个线索。

尝试使用
JavascriptExecutor
,导入它们:

import org.openqa.selenium.JavascriptExecutor;
试试这个:

WebElement chk = driver.findElement(By.xpath("//*[@class='custom-checkmark' and ./preceding-sibling::*[@id='terms_checkbox']]"));//or you have
String getPro;
getPro = ((JavascriptExecutor)driver).executeScript("return window.getComputedStyle(arguments[0], ':after').getPropertyValue('background-color');",chk).toString();
System.out.println(getPro);
chk.click();
Thread.sleep(1000);
getPro = ((JavascriptExecutor)driver).executeScript("return window.getComputedStyle(arguments[0], ':after').getPropertyValue('background-color');",chk).toString();
System.out.println(getPro);


使用
.getPropertyValue('background-color')不确定
,但这可能是一个线索。

让代码正常工作。以输入标记而不是span为目标解决了问题。我在第一次尝试时在代码上犯了一个错误,所以这就是为什么isSelected字段不起作用,而改为以span标记为目标,从而打开了此线程。对此表示抱歉,感谢大家的支持s帮助。

让代码正常工作。将输入标记作为目标而不是span解决了问题。我在第一次尝试时在代码上犯了一个错误,这就是为什么isSelected字段不起作用,转而将span标记作为目标,从而打开了此线程。对此表示抱歉,感谢大家的帮助。

对于Python?是吗va?你能提供url网站吗?嗨@pguardiario,我在用Java。@Frian,很抱歉我不能确定我能提供url,因为这是我公司的web应用程序,需要得到他们的批准。嗨@pguardiario,我已经更新了我的帖子,说明了各州之间的差异。这能帮助你指导我定位元素吗?对于Python?Java?你能提供url网站吗?嗨@pguardiario,我正在使用Java。@Frian,抱歉,我不能确定我能提供url,因为这是我公司的web应用程序,需要得到他们的批准。嗨@pguardiario,我已经更新了我的帖子,说明了各州之间的差异。这能帮助你指导我定位元素吗?嗨@user3263086,谢谢你的回复。恐怕我试过了,但没用。在查找innerHTML时,它会给我一个空字符串。也尝试过使用outer,但与未单击时相比没有什么不同。@FrancislainyCampos请查看我的更新答案。这可能会对你有所帮助。非常感谢。抱歉,它实际上正在工作现在准备好了,只是还不能接受答案。您好@user3263086,谢谢您的回复。恐怕我试过了,但没有用。在查找内部HTML时,它会给我一个空字符串。也尝试过外部HTML,但与未单击时相比没有任何区别。@FrancislainyCampos请查看我的更新答案。这可能会对您有所帮助u、 非常感谢。抱歉,它实际上已经开始工作了,只是还不能接受答案。谢谢@pguardiario。不幸的是,它没有工作,因为它返回的内容是空的。我在这里做了一个测试,你可以试试。如果有两个复选框,你可能需要调整css,非常感谢你的拨弄。以前从未听说过它,但看起来很有趣正在测试。现在学习了一些新内容。:)谢谢@pguardiario。不幸的是,它不起作用,因为它会返回空白作为内容。我在这里做了一个测试,以便您可以尝试。如果有两个复选框,您可能需要调整css,非常感谢小提琴。以前从未听说过它,但似乎很有趣。现在学习了一些新内容。:)嗨@Frian,谢谢你的回答。我已经用我目前正在使用的JS代码更新了我的问题,改为以display属性为目标,但不起作用,因为它在两种情况下都不会返回任何结果,即使显示了选中的勾号。嗨@Frian,谢谢你的回答。我已经用我目前正在使用的JS代码更新了我的问题,改为以display属性为目标,但不起作用,因为它在两种情况下都不会返回任何结果,即使在显示选中的勾号时也是如此。谢谢,在最终得到这个答案之前,我浏览了所有其他答案…谢谢,在最终得到这个答案之前,我已经看过了所有其他的答案。。。