首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PythontoC# Selenium CSS选择器无法工作

PythontoC# Selenium CSS选择器无法工作
EN

Stack Overflow用户
提问于 2022-01-09 10:18:45
回答 1查看 108关注 0票数 0

我用Python编写了一个使用Selenium自动完成表单的脚本。它的工作没有任何问题。

我对C#非常陌生,但我想我会尝试把它移植过来,这样我就可以构建一个Windows可执行文件来与一些不懂技术的家庭成员共享它。

然而,当我尝试相同的代码时,我会在C#中得到一个超时。

举个例子,我试图点击一个单选按钮:

单选按钮的HTML:

代码语言:javascript
复制
<input data-v-7af3e24c="" type="radio" id="condition-2" name="condition" class="govuk-radios__input" value="false">

Python (这起作用):

代码语言:javascript
复制
WebDriverWait(driver, max_wait).until(EC.presence_of_element_located(
    (By.CSS_SELECTOR, '[id$=condition-2]'))).click()

但是,当我尝试使用C#中相同的请求时:

代码语言:javascript
复制
int elementLoadTime = 5; // Max 5 seconds for element to load 
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, elementLoadTime)); 
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.CssSelector("[id$=condition-2]"))).Click();

这就产生了:

代码语言:javascript
复制
Exception thrown: 'OpenQA.Selenium.WebDriverTimeoutException' in WebDriver.dll

奇怪的是,我能够使用完整的C#选择XPath中的元素,因此元素显然是加载的,这强烈地表明问题在于我的CSS选择器查询。

代码语言:javascript
复制
// This works
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.XPath("/html/body/div[1]/div[2]/main/div/div/form/fieldset/div[2]/div/div/div[2]/label"))).Click();

但是,很明显,这是一种非常脆弱的代码编写方式,一旦站点发生轻微变化,代码就会崩溃。

我也尝试过"[id$='condition-2']""[id$=\"condition-2\"]",但没有结果。

有人能说明我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-15 15:00:51

而不是使用:

代码语言:javascript
复制
By.CssSelector("[id$=condition-2]")

只需使用:

代码语言:javascript
复制
By.Id("condition-2")

如果您想使用Xpath,那么做两件事。首先,忘记浏览器中有一个‘复制Xpath’的选项--只需将其从脑海中清除。第二,使用这个Xpath代替:

代码语言:javascript
复制
By.Xpath("//input[@id=\"condition-2\"]")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70640311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档