非常感谢任何帮助。
我希望我的程序登录到really.ca(只要你输入正确的用户凭据,这是有效的),导航到特定的职位发布(工作),点击第一个橙色申请按钮(工作), iframe弹出。
然后我想点击出现的iframe中的蓝色应用按钮。 "申请不同的简历?"链接(如果你没有登录,确实你不会看到这个。)
如果您没有真正的帐户,并希望提供帮助,只需点击弹出式iframe中的任何链接即可。示例:尝试单击"立即创建一个"链路
下面的代码工作了两周,但现在似乎Indeed.ca对网站做了一个小改动,代码被破坏了
import java.io.IOException;
import java.util.ArrayList;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Test {
//IOException, InterruptedException, NoSuchElementException
public static void main(String[] args) throws IOException, InterruptedException, NoSuchElementException {
System.setProperty("webdriver.gecko.driver", "C:\\Users\\Padoga\\Documents\\geckodriver-v0.18.0-win64\\geckodriver.exe");
try {
FirefoxDriver driver = new FirefoxDriver();
driver.get("https://secure.indeed.com/account/login?service=my&hl=en_CA&co=CA");
driver.findElement(By.xpath("//*[@id=\"signin_email\"]")).sendKeys("youremail@email.com");
driver.findElement(By.xpath("//*[@id=\"signin_password\"]")).sendKeys("password");
driver.findElement(By.xpath("//*[@id=\"loginform\"]/button")).click();
driver.navigate().to("https://ca.indeed.com/viewjob?jk=ff97666702741fef&q=marketing&l=Toronto%2C+ON&tk=1boluh7om5igq9ng&from=web");
// int size = driver.findElements(By.tagName("iframe")).size();
// System.out.println(size);
Thread.sleep(3000);
//click orange "apply now" button
driver.findElement(By.xpath("//*[@id=\"apply-state-picker-container\"]/div[1]/span[1]")).click();
Thread.sleep(3000);
//don't believe this is working now - below used to switch to correct pop-up iframe
driver.switchTo().frame(1);
driver.switchTo().frame(0);
//not working anymore -- click "apply with a different resume?" link
driver.findElement(By.xpath("\"//*[@id=\\\"form_container\\\"]/div[2]/div[1]/div[1]/p/a\"")).click();
//no longer reach below steps
//click on resume "choose file" button and upload resume
driver.findElement(By.id("resume")).sendKeys("C:\\Users\\Padoga\\resumes\\Resume.pdf");
//click blue apply button
driver.findElement(By.id("apply-div")).click();
}
catch(Exception e){
//System.out.println(e.getMessage());
}
// driver.quit();
}
}
答案 0 :(得分:0)
您需要先切换以执行iframe元素中的任何操作
切换到元素的代码是: -
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="lab_no" id="lab-no" class="form-control">
<option value="Lab 01" >Lab 01</option>
<option value="Lab 02">Lab 02</option>
</select>
在上面的代码中,0是一个索引。因此它会将控制权转移到DOM中的第一个iframe。您可能需要更改索引1,2,...等等。还有另一个参数也可以切换到没有索引的帧
基本上,我们可以使用3种方式切换帧中的元素。
有关详情,请参阅以下网址
http://toolsqa.com/selenium-webdriver/handling-iframes-using-selenium-webdriver/
https://www.guru99.com/handling-iframes-selenium.html
希望它会对你有所帮助:)。
答案 1 :(得分:0)
尝试使用以下代码,看看它是否适合您 -
driver.switchTo().frame("page_frame");
driver.findElement(By.xpath("//*[@id="form_container"]/div[2]/div[1]/div[1]/p/a")).click();
更新 -
driver.switchTo().frame("indeedapply-modal-preload-iframe");
driver.findElement(By.xpath("//*[@id="form_container"]/div[2]/div[1]/div[1]/p/a")).click();
更新2 -
我在另一个iframe中找到了一个iframe。所以,首先你需要切换到外部iframe然后切换到内部iframe,然后切换到元素。
可能的解决方案 -
driver.switchTo().frame("indeedapply-modal-preload-iframe");
driver.switchTo().frame(0);
driver.findElement(By.xpath("//*[@id="form_container"]/div[2]/div[1]/div[1]/p/a")).click();
OR
driver.switchTo().frame(0);
driver.switchTo().frame(0);
driver.findElement(By.xpath("//*[@id="form_container"]/div[2]/div[1]/div[1]/p/a")).click();