这是我与硒写的方法登录到我的网页:NoSuchElementException异常:消息:没有这样的元素:找不到元素:{“方法”:“ID”,“选择”:“用户名”}
def login(self, username, password):
driver.switch_to.default_content()
driver.switch_to.frame("iframe")
driver.find_element_by_id("username").send_keys(username)
driver.find_element_by_id("password").send_keys(password)
driver.find_element_by_id("loginButton").click()
下面是机器人框架的代码,我有:
*** Settings ***
Library CustomSelenium2Plus.py
*** Test Cases ***
SR Create New Service
Open Browser https://partner.sdg.msg.lab.t-mobile.com/tpim/ Chrome
${webdriver}= Get webdriver instance
Set Driver ${webdriver}
Login usrnm pwd
...
Delete Service
Close Browser
CustomSelenium2Plus.py
是一个自定义的库我写的子类RobotFramework的Selenium2Library并且是登录方法所在。当我第一次使用Login
关键字进行调用时,该方法完全有效。然而,它抛出一个NoSuchElementException
,当它被称为Delete Service
关键字的函数内的第二次,看起来像这样:
def delete_service(self):
self.logout()
self.login("usrnm", "pwd")
...
我已经检查了框架是正确的。我也已经尝试让我的WebDriver
等待iframe和用户名textarea的可见性,一个隐含的WebDriverWait
和一个time.sleep(30)
。
编辑:HTML代码是不是我的,很丑陋,但这里有一个撷取画面
有技术上嵌套中的每个其他四个I帧,但调用driver.switch_to.frame("iframe")
任何不止一次地抛出一个NoSuchFrameException
如果您提供了相关的HTML,这可能会有所帮助,因此我们可以仔细检查并确保没有任何简单的事情被忽略。 – JeffC
上面显示的登录方法在执行任何操作之前没有任何元素的等待,这可能是NoSuchElementException的原因,我猜测在登出之后,登录页面需要时间来加载元素 –
@SatishGupta我没有包括这些代码行,但我已经尝试在我的登录功能等待。我在切换帧之前和之后加上time.sleep(30)(加上我提到的其他东西),以确保它。问题依然存在;第一次工作,而不是第二次。 –