selenium - 为什么我不能使用变量?[科特林]
问题描述
我是一名刚切换到 Kotlin 的 Java 开发人员,但我还没有完全理解它。我不明白为什么我不能在以下代码中的其他方法中使用我的 obj ..?我在 IntelliJ 上将 kotlin 与 selneium 结合使用(这不应该真的有什么不同,应该吗?)我尝试将它从 init 方法中取出,但这也不起作用......提前致谢。
import org.openqa.selenium.By
import org.openqa.selenium.chrome.ChromeDriver
class MapsDriver()
{
init {
var obj : ChromeDriver = ChromeDriver()
}
fun convertToGmURL(string : String) : String{
var string_trimmed : String = ""
string.forEach {
if(it == ' '){
string_trimmed += "+"
}
else{
string_trimmed += it
}
}
return string_trimmed
}
fun searchMaps(search : String){
val searchConverted : String = convertToGmURL(search)
obj.get("https://www.google.com/maps/search/?api=1&query=$searchConverted")
}
fun getXpath(Xpath : String) : String{
loop@while(true) {
try {
var result = obj.findElementByXPath(Xpath)
return result.text
}
catch (NoSuchElementException : Exception){
continue@loop
}
}
}
fun getResultName(resultNumber : Int) : String{
val convertedIndex : Int = (resultNumber * 2) + 1
var result : String = getXpath("//*[@id=\"pane\"]/div/div[1]/div/div/div[4]/div[1]/div[$convertedIndex]/div[1]/div[1]/div[1]/div[2]/h3/span")
return result
}
fun getAllResults(){
Thread.sleep(1_000)
val amountIndexes = getXpath("//*[@id=\"pane\"]/div/div[1]/div/div/div[4]/div[2]/div/div[1]/span/span[2]")
val amountIndexesInt : Int = amountIndexes.toInt()
val resultsName : Array<String> = Array(amountIndexesInt){getResultName(it)}
resultsName.forEach { println(it) }
}
}
fun main(){
System.setProperty("webdriver.chrome.driver", "/home/josef/Java/cdriver/chromedriver")
val md : MapsDriver = MapsDriver()
md.searchMaps("Autohaus Muenchen")
md.getAllResults()
}
解决方案
问题在于它obj
是该方法的本地变量init
,因此它等效于以下 Java 代码:
class MapsDriver {
public MapsDriver() {
ChromeDriver obj = new ChromeDriver();
// you can't use obj anywhere else as it's local to the constructor
}
}
如果你想obj
成为一个实例变量,那么你应该这样做:
class MapsDriver {
private val obj = ChromeDriver() // instance variable, no need for init block in this case
...
}
推荐阅读
- javascript - 这种提升如何与块范围一起工作?
- c++ - 为什么取消对同一个指针的两个句柄的引用会导致这种意外行为?
- ruby - 创建新的 Ruby 应用程序后出现此错误。因此无法运行 rails 服务器
- go - 通过clinet-go列出kubernetes资源,如何获取kind和apiversion?
- html - 如何触发垫芯片错误验证?
- google-sheets - 用于在 Google 表格中跨多个列进行计数的更简化功能
- ios - NSFetchedResultsController 如何知道要从 CoreData 读取的选定行范围,而不是读取整个所有行?
- c++ - CMFCMaskedEdit GetWindowText 不返回当前文本
- python - 执行语句 500 次忽略异常
- php - Jquery Onclick .post 返回 // Uncaught SyntaxError: '' string literal contains an unscaped line break