selenium - GMail - 等待页面完全加载
问题描述
我正在尝试自动化 gmail 页面(用于某种电子邮件验证),在输入用户名和密码后,我想等待页面完全加载,然后再继续我的下一个操作。
这是我尝试过的:
Selenium2Library.Input Text //input[contains(@id, "identifierId")] ${local_email_username}
Selenium2Library.Click Element //span[text()="Berikutnya"]
Sleep 2s
Selenium2Library.Wait Until Element Is Visible //input[contains(@name, "password")] timeout=30s
Selenium2Library.Input Password //input[contains(@name, "password")] ${local_email_password}
Selenium2Library.Click Element //span[text()="Berikutnya"]
Sleep 2s
Selenium2Library.Wait Until Element Is Visible //input[contains(@aria-label, "Search")] timeout=30s
### should be logged in to gmail
Log >>> logged in to gmail. sleeping..
Sleep 5s
### make sure the email page fully loaded
Log >>> making sure the email page fully loaded.. waiting new conversation button appeared
Comment Wait Until Keyword Succeeds 10x 2s Selenium2Library.Page Should Contain ${email_name}
Wait Until Keyword Succeeds 20x 3s Selenium2Library.Page Should Contain Element //button[contains(@title, 'New conversation')]
Log >>> email page fully loaded. start searching activation email...
我想要实现的是等待新的对话按钮,这表明页面已完全加载(//button[contains(@title, 'New conversation')])
问题是脚本永远找不到按钮。我试图检查并搜索那个 xpath,并找到了元素。
有什么解决办法吗?
更新:
我尝试像这样使用 Select Frame .. 就像@Gaurav 说的那样.. 这是代码:|
Selenium2Library.Select Frame ${iframe_locator}
Wait Until Keyword Succeeds 20x 3s Selenium2Library.Page Should Contain Element //button[contains(@title, 'New conversation')]
Selenium2Library.Unselect Frame
${iframe_locator} 在哪里//body/div[7]/div[3]/div[1]/div[2]/div[1]/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/iframe[2]
但仍然没有运气
解决方案
该按钮位于 iFrame 中,因此您需要切换到该 iFrame(可能有更多 iframe,因此您需要切换到该特定 iframe)并查找//button[contains(@title, 'New conversation')]
这是相应的Java实现
@Test
public void newConversation() throws IOException, InterruptedException{
driver.get("https://www.google.com/intl/hi/gmail/about/");
driver.findElement(By.linkText("प्रवेश करें")).click();
driver.findElement(By.id("identifierId")).sendKeys("*********@gmail.com");
driver.findElement(By.id("identifierNext")).click();
Thread.sleep(30000);
driver.switchTo().frame(5);
WebElement element = driver.findElement(By.xpath("//div[contains(@aria-label,'Change profile picture')]"));
Actions action = new Actions(driver);
action.moveToElement(element).build().perform();
driver.findElement(By.xpath("//button[contains(@title,'New conversation')]")).click();
}
推荐阅读
- c - 为什么我的输出错误?C新手
- google-geocoding-api - 谷歌地理编码 API 返回错误的状态代码结果
- ibm-cloud-infrastructure - 获取用于 SoftLayer 帐户中的卷的字节数
- django - 在无法访问服务器的情况下使 JS 中的 Django 会话无效
- pandas - 使用 pip 安装 pandas 时出错:找不到满足要求 numpy==1.9.3 的版本
- c++ - How can I use different #defines for one project used by two different solutions without creating new configurations
- javascript - Puppeteer - 无限滚动情况
- powerbi - DAX 表达式 Power BI 中筛选的 LOD 计算
- ios - UIDropShadowView 在翻转水平模式转换期间显示
- javascript - MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个消息列表。使用emitter.setMaxListeners() 增加限制