SeleniumBase是否支持定位器链式调用?报无效定位器错误
解决SeleniumBase定位器链式调用的"invalid locator"错误
问题原因
你在SeleniumBase中调用product.find_element("div/h4/a")时,直接传入了相对路径字符串,但SeleniumBase默认会将这类无前缀的字符串当作CSS选择器处理,而div/h4/a不是有效的CSS语法(CSS层级选择器用空格或>,而非/),因此触发了"invalid locator"错误。
而原生Selenium中你明确指定了By.XPATH,所以会按XPath相对路径解析,自然能正常运行。
解决方案
有两种方式可以修正这个问题:
方式1:显式指定XPath定位策略
和原生Selenium写法一致,导入By类后,传入定位策略和路径:
from selenium.webdriver.common.by import By # ... if product.find_element(By.XPATH, "div/h4/a").text == 'Blackberry': return ShopPage.add_to_cart(product)
方式2:使用SeleniumBase的定位器前缀语法
直接在路径前添加xpath=前缀,明确告诉SeleniumBase按XPath解析:
if product.find_element("xpath=div/h4/a").text == 'Blackberry': return ShopPage.add_to_cart(product)
完整修改后的SeleniumBase代码示例
def get_products(self, sb): return sb.find_elements("//div[@class='card h-100']") products = shop_page.get_products(sb) print(len(products)) # 4 if len(products) > 0: for product in products: print(product) # 替换为上述两种方式之一 if product.find_element(By.XPATH, "div/h4/a").text == 'Blackberry': return ShopPage.add_to_cart(product)
内容的提问来源于stack exchange,提问作者Biedrzu
相关产品推荐
相关产品推荐

