我正在try 使用is_selected()方法判断是否 Select 了复选框.我明白,由于我试图验证的元素不是合法复选框,因此以这种方式验证它是不正确的.这非常明显,因为它被锚定(<a>)和意大利标记(<i>)Package.我try 过不同的Xths变体,例如:

//input[@name='non_stop']/preceding-sibling::i
//input[@name='non_stop']/parent::a
//a[@title='Non Stop Flights']/i[contains(@class, 'ico ico-checkbox')] (possibly the most wrong one here)

但有解决办法来验证这一点吗?这是我的代码:

driver = webdriver.Chrome()
driver.get("https://www.yatra.com/")
non_stop_flights = driver.find_element(
    By.XPATH, "//input[@name='non_stop']/preceding-sibling::i")
print("Before clicking")
print(non_stop_flights.is_selected())  # Expecting False here
non_stop_flights.click()
sleep(3)
print("After clicking")
print(non_stop_flights.is_selected())  # Expecting True here

但我仍然得到最后一行的输出为False.如何让它识别出复选框已被选中?

推荐答案

问题是不间断的输入实际上并没有存储已判断的状态.它存储在其上方的I标签中,但在A标签内部.

<a for="BE_flight_non_stop" title="Non Stop Flights" class="custom-check">
->  <i class="ico ico-checkbox"></i>
    <input data-trackcategory="Home Page" data-trackaction="Booking Engine" data-trackvalue="Non Stop Flight - 判断/Unchecked" type="checkbox" name="non_stop" id="BE_flight_non_stop" class="eventTrackable js-prodSpecEvtCat">
    Non Stop Flights
</a>

使用I标签上的类跟踪判断的状态.

未选中

<i class="ico ico-checkbox"></i>

判断

<i class="ico ico-checkbox ico-checkbox-checked"></i>
                           ^^^^^^^^^^^^^^^^^^^^ checked state

有了这些信息,我们可以制定一种快速方法来确定这些字段的判断状态

def is_checked(e):
    """
    Returns a True if the checkbox is checked, False otherwise.
    
    Parameters:
        e (WebElement): The I tag for the checkbox
    """
    return "ico-checkbox-checked" in e.get_attribute("class")

然后从您的原始(修改的)脚本中调用它

driver = webdriver.Chrome()
driver.get("https://www.yatra.com/")
non_stop_flights = driver.find_element(By.CSS_SELECTOR, "a[title='Non Stop Flights'] i")
print("Before clicking")
print(is_checked(non_stop_flights))  # Expecting False here
non_stop_flights.click()
print("After clicking")
print(is_checked(non_stop_flights))  # Expecting True here

而且它的工作效果如预期.

Python相关问答推荐

NumPy中的右矩阵划分,还有比NP.linalg.inv()更好的方法吗?

ambda将时间戳与组内另一列的所有时间戳进行比较

Google Drive API获取文件计量数据

拆分pandas列并创建包含这些拆分值计数的新列

有条件地采样我的大型DF的最有效方法

使用polars .滤镜进行切片速度比pandas .loc慢

max_of_three使用First_select、second_select、

. str.替换pandas.series的方法未按预期工作

如何更改分组条形图中条形图的 colored颜色 ?

如何使用它?

在np数组上实现无重叠的二维滑动窗口

如何从数据库上传数据到html?

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

在两极中过滤

根据客户端是否正在传输响应来更改基于Flask的API的行为

BeautifulSoup-Screper有时运行得很好,很健壮--但有时它失败了::可能这里需要一些更多的异常处理?

从嵌套极轴列的列表中删除元素

如何从数据框列中提取特定部分并将该值填充到其他列中?

我怎么才能用拉夫分拣呢?

如何在PYTHON中向单元测试S Side_Effect发送额外参数?