我用Python编写了一个使用Selenium自动完成表单的脚本。它的工作没有任何问题。
我对C#非常陌生,但我想我会尝试把它移植过来,这样我就可以构建一个Windows可执行文件来与一些不懂技术的家庭成员共享它。
然而,当我尝试相同的代码时,我会在C#中得到一个超时。
举个例子,我试图点击一个单选按钮:
单选按钮的HTML:
<input data-v-7af3e24c="" type="radio" id="condition-2" name="condition" class="govuk-radios__input" value="false">Python (这起作用):
WebDriverWait(driver, max_wait).until(EC.presence_of_element_located(
(By.CSS_SELECTOR, '[id$=condition-2]'))).click()但是,当我尝试使用C#中相同的请求时:
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();这就产生了:
Exception thrown: 'OpenQA.Selenium.WebDriverTimeoutException' in WebDriver.dll奇怪的是,我能够使用完整的C#选择XPath中的元素,因此元素显然是加载的,这强烈地表明问题在于我的CSS选择器查询。
// 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\"]",但没有结果。
有人能说明我做错了什么吗?
发布于 2022-02-15 15:00:51
而不是使用:
By.CssSelector("[id$=condition-2]")只需使用:
By.Id("condition-2")如果您想使用Xpath,那么做两件事。首先,忘记浏览器中有一个‘复制Xpath’的选项--只需将其从脑海中清除。第二,使用这个Xpath代替:
By.Xpath("//input[@id=\"condition-2\"]")https://stackoverflow.com/questions/70640311
复制相似问题